A major difference between a dataflow architecture and a von Neumann architecture is that a data flow architecture does not use a program counter to select instructions for execution as does a von Neumann architecture. The dataflow architecture uses dependencies defined by the dataflow graph of a program to determine those instructions that can be executed based on the availability of the data that each instruction requires for execution. When the data required by an instruction is available, the instruction is “fired.”
A data flow machine typically uses a dataflow memory to store data as it is processed. The dataflow memory may include first-in-first-out (FIFO) buffers between pipeline stages of a dataflow architecture. Alternatively, a token memory may be monitored by a scheduler which fires instructions when operands are tagged as being available in the token memory.
For some applications of a dataflow architecture, it may be desirable to access a memory that is external to the dataflow memory. For a dataflow architecture having FIFO buffers between pipeline stages the external memory is in addition to the FIFO buffers, and for a dataflow architecture having a token memory that is monitored by a scheduler the memory is in addition to the token memory. The external memory may be used for inputting data to the dataflow or outputting data from the data flow. However, in order to produce semantically correct results in executing a program on a dataflow machine, accesses to the external memory must be synchronized.
The present invention may address one or more of the above issues.